关闭一个视图

此示例演示了如何使用 Navigation.useDismiss 钩子以编程方式关闭已呈现的视图。当你希望在用户交互(如点击按钮或文本标签)后关闭自定义视图时,这个方法非常有用。


目的

你将学会:

  • 通过 Navigation.useDismiss 获取关闭视图的函数
  • 调用该函数以关闭当前已呈现的视图
  • 使用 Script.exit 安全退出脚本,以避免内存泄漏

示例代码

1import { Navigation, NavigationStack, Script, Text, VStack } from "scripting"
2
3function View() {
4  // 获取上下文中的 `dismiss` 函数
5  const dismiss = Navigation.useDismiss()
6
7  return <NavigationStack>
8    <VStack
9      navigationTitle={"关闭视图"}
10    >
11      <Text
12        foregroundStyle={'link'}
13        onTapGesture={() => {
14          dismiss()
15        }}
16      >点击关闭视图</Text>
17    </VStack>
18  </NavigationStack>
19}
20
21async function run() {
22  await Navigation.present({
23    element: <View />
24  })
25
26  // 避免内存泄漏
27  Script.exit()
28}
29
30run()

关键概念

该钩子返回当前视图上下文中的 dismiss 函数。调用它会关闭通过 Navigation.present() 呈现的视图。

使用场景

  • 手动关闭一个已呈现的 UI 视图
  • 用于表单提交、取消或导航控制逻辑中

示例用法

在示例中,渲染了一个可点击的 Text

1<Text
2  foregroundStyle={'link'}
3  onTapGesture={() => {
4    dismiss()
5  }}
6>
7  点击关闭视图
8</Text>

点击该文本会触发 dismiss(),从而关闭视图。


最佳实践

  • Navigation.present() 执行完成后,始终调用 Script.exit() 以避免内存泄漏
  • 将视图包装在 NavigationStack 中,以支持标题栏和导航行为
  • 确保 useDismiss 只在通过 Navigation.present() 呈现的组件树中使用

运行效果

此脚本会呈现一个简单视图,视图中包含一个链接样式的文本“点击关闭视图”。当用户点击该文本时,视图将被关闭。